﻿using System.Collections.Generic;
using System.Runtime.Serialization;
using System.ServiceModel;

namespace WebService
{
    [ServiceContract]
    public interface IGLKService
    {
        [OperationContract]
        IEnumerable<Product> GetProducts();

        [OperationContract]
        OrderData GetPrePayDataProducts(int userID, IEnumerable<int> products, string returnUrl);

        [OperationContract]
        OrderData GetPrePayDataBalance(int userID, int balance, string returnUrl);

        [OperationContract]
        int CreateClient(string email);

        [OperationContract]
        int GetClientByEmail(string email);

        [OperationContract]
        PaymentResultData GetPaymentResult(string orderID);
    }

    /// <summary>
    /// Состояния заказа
    /// </summary>
    [DataContract]
    public enum OrderState
    {
        /// <summary>
        /// Набор товаров выбран и зарегистрирован, но еще не оплачен
        /// </summary>
        Prepayed = 0,
        /// <summary>
        /// Пользователь перенаправлен на сайт с успешной оплатой
        /// </summary>
        SuccessReturned = 1,
        /// <summary>
        /// Пользователь перенаправлен на сайт с НЕуспешной оплатой
        /// </summary>
        DeclineReturned = 2,
        /// <summary>
        /// Оплата подтверждена системой электронных платежей
        /// </summary>
        OrderConfirmed = 3
    }

    [DataContract]
    public class Product
    {
        [DataMember]
        public int ID { set; get; }
        [DataMember]
        public string Name { set; get; }
        [DataMember]
        public decimal Price { set; get; }
    }

    /// <summary>
    /// Набор данных для наполнения предпродажной страницы
    /// </summary>
    [DataContract]
    public class OrderData
    {
        /// <summary>
        /// Список продуктов
        /// </summary>
        [DataMember]
        public IEnumerable<Product> Products { set; get; }
        /// <summary>
        /// Идентификатор всей покупки
        /// </summary>
        [DataMember]
        public string OrderID { set; get; }
        /// <summary>
        /// Сумма покупки
        /// </summary>
        [DataMember]
        public decimal OrderPrice{ set; get; }// { get { return Products.Sum(x => x.Price); } }
        /// <summary>
        /// Адрес платежной формы
        /// </summary>
        [DataMember]
        public string FormUrl { set; get; }
    }

    /// <summary>
    /// Набор данных для наполнения предпродажной страницы
    /// </summary>
    [DataContract]
    public class PaymentResultData
    {
        /// <summary>
        /// Результат операции
        /// </summary>
        [DataMember]
        public bool OperationResult { set; get; }
        /// <summary>
        /// Комментарий к результату операции
        /// </summary>
        [DataMember]
        public string OperationResultDescription { set; get; }
        /// <summary>
        /// Список продуктов
        /// </summary>
        [DataMember]
        public IEnumerable<Product> Products { set; get; }
    }


}
